package com.byx.chatclient.contract.user;

import com.byx.chatclient.bean.LoginDropDownBean;
import com.byx.chatclient.pojo.LoginDto;
import com.byx.chatclient.pojo.LoginVo;
import com.byx.chatclient.view.IBaseView;

import java.util.List;

/**
 * LoginTaskContract
 *
 * @author Superb
 * @date 2021/2/22 12:58
 */
public interface LoginTaskContract {
    /**
     * Model层
     */
    interface Model{
        /**
         * 保存登录信息
         * @param loginDto 登录后服务端返回的基本信息
         * @param password 密码
         */
        void saveLoginInfo(LoginDto loginDto, String password, String localPath);

        /**
         * 获取登录信息
         * @return
         */
        List<LoginDropDownBean> getLoginInfo();

        /**
         * 登录逻辑
         * @param loginVo
         * @param callback 回调
         */
        void login(LoginVo loginVo, LoginCallBack<LoginDto> callback);

        /**
         * 登录回调接口
         * @param <T> 回调参数类型
         */
        interface LoginCallBack<T>{
            /**
             * 登录成功
             * @param data 返回的数据
             */
            void onSuccess(T data);

            /**
             * 返回的错误信息
             * @param code 错误代码
             * @param msg 错误信息
             */
            void onFailure(int code, String msg);

            /**
             * 账号不存在
             */
            void onAccountError();

            /**
             * 账号存在，密码错误
             */
            void onPasswordError();

            void onUpdate(float progress);
        }
    }

    /**
     * view层
     */
    interface View extends IBaseView {
        /**
         * 获取登录信息
         * @return 必需参数
         */
        LoginVo getLoginVo();

        /**
         * 登录错误时view层显示错误信息
         * @param errorMsg
         * @param code
         */
        void onError(String errorMsg,int code);

        /**
         * 登录错误时view层显示错误信息
         * @param errorMsg
         */
        void onError(String errorMsg);

        /**
         * 登录成功时调用view层方法
         */
        void onSuccess();

        void onUpdate(float progress);

    }

    interface Presenter {
        /**
         * 登录
         */
        void login();

        /**
         * 获取登录信息
         * @return
         */
        List<LoginDropDownBean> getLoginInfo();
    }
}
